import tkinter as tk
import re

# 初始化数据
解题思路 = [
      '题目 是 返回文本框的值',
      '题型 是 返回题型（题目）',
      '如果 题型 等于 真 那么',
      '    被减数 是 返回被减数（题目）',
      '    减数 是 返回减数（题目）',
      '    结果 是 被减数 减去 减数',
      '    打印（结果）',
      '否则',
      '    打印（"我没学过"）',
      '结束判断'
]
#  关于去括号问题，如返回题型（题目）也可以写成'返回 题目 中的题型',更容易理解。不过需要正则匹配将其替换为'返回题型（题目）'，因此这里做了简写。
语法字典 = {
    '是': '=',
    '返回文本框的值': 'text_area.get()',
    '返回题型': '返回题型',
    '（': '(',
    '）': ')',
    '如果': 'if ',
    '等于': ' is ',
    '真': ' not None',
    '那么': ':\t',
    '减去': '-',
    '打印': 'print',
    '否则': 'else:\t',
    '结束判断': '\n'
}
# 函数字典，返回题目类型，如果符合特定正则表达式则返回 True，否则返回 False
def 返回题型(text):
    pattern = re.compile(r'^\S*有\d+\S+花了\d\S+还剩多少元？')
    # pattern = re.compile(r'\S*有\d+\S+花了\d\S+还剩几')
    return pattern.search(text)

# 从题目文本中提取被减数和减数
def 返回被减数(text):
    pattern = re.compile(r'\S*有(\d+)')
    match = pattern.search(text)
    if match:
        return int(match.group(1))
    return None
# 从题目文本中提取减数
def 返回减数(text):
    pattern = re.compile(r'\S*有\d+\S+花了(\d+)')
    match = pattern.search(text)
    if match:
        return int(match.group(1))
    return None
# 主计算函数，根据输入的题目文本进行计算并显示结果
def run():
    # 读取解题思路：大型项目可以做成异步
    源码 = ''
    for 步骤 in 解题思路:
        思路 = 步骤
        # 简单的语法解析
        for 语法 in 语法字典:
            语句 = 语法字典[语法]
            # 简单的语法替换（全部替换）
            思路 = 思路.replace(语法, 语句)
        源码 += 思路 + '\n'
        print(思路)
    # 运行代码
    exec(源码)

# 创建主窗口
root = tk.Tk()
root.title("数学编程字典")

# 创建文本输入框
text_area = tk.Entry(root, width=50)
text_area.insert(0, "小明有100元，花了50元，还剩多少元？")
text_area.pack()

# 创建计算按钮
button = tk.Button(root, text="计算", command=run)
button.pack()

# 运行主循环
root.mainloop()